function Dog(name,energy){
  let _listeners ={};

  let _name   = name,
      _energy = energy;
  
  let timer = setInterval(() => {
    if(_energy > 0){
      emit('bark');
      _energy--;
    }else{
      clearInterval(timer);
    }
  },1000);

  this.name   =  _name;
  this.energy = () =>  _energy;

  this.on = (evt,fn) => {
    //validate(校验) _listeners.[evt] exist
    //检验 _listeners.[evt] 存在
    if(typeof(_listeners[evt]) === 'undefined'){
      _listeners[evt] = [];
    }
    _listeners[evt].push(fn);
  };

  function emit(evt,arg){
    if(typeof(_listeners[evt]) === 'undefined'){
      return;
    }

    _listeners[evt].forEach((fn) => {
      fn.call(this,arg);
    });
  }
}


module.exports = Dog;
